Вам предлагается выяснить, какое распределение лучше использовать в наивном байесовском классификаторе в зависимости от вида признаков.
Загрузите датасеты digits и breast_cancer из sklearn.datasets. Выведите несколько строчек из обучающих выборок и посмотрите на признаки.
In [1]:
%matplotlib inline
import numpy as np
from sklearn.datasets import load_digits, load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import BernoulliNB, MultinomialNB, GaussianNB
In [2]:
#loading datasets
digits = load_digits()
X_dig = digits.data
y_dig = digits.target
breast_cancer = load_breast_cancer()
X_br_can = breast_cancer.data
y_br_can = breast_cancer.target
In [3]:
print(digits.DESCR)
In [4]:
print(X_dig[42])
In [5]:
print(breast_cancer.DESCR)
In [6]:
print(X_br_can[42])
С помощью sklearn.cross_validation.cross_val_score c настройками по умолчанию и вызова метода mean() у возвращаемого этой функцией numpy.ndarray, сравните качество работы наивных байесовских классификаторов на этих двух датасетах. Для сравнения предлагается использовать BernoulliNB, MultinomialNB и GaussianNB.
In [7]:
#Initializing Naive Bayes classifiers
bnb = BernoulliNB()
mnb = MultinomialNB()
gnb = GaussianNB()
In [8]:
#Cross-validation of classifiers
score_bnb_dig = cross_val_score(bnb, X_dig, y_dig)
score_bnb_br_can = cross_val_score(bnb, X_br_can, y_br_can)
score_mnb_dig = cross_val_score(mnb, X_dig, y_dig)
score_mnb_br_can = cross_val_score(mnb, X_br_can, y_br_can)
score_gnb_dig = cross_val_score(gnb, X_dig, y_dig)
score_gnb_br_can = cross_val_score(gnb, X_br_can, y_br_can)
In [9]:
print('Digits dataset')
print('BernoulliNB mean cross_val_score: ' + str(score_bnb_dig.mean()))
print('MultinomialNB mean cross_val_score: ' + str(score_mnb_dig.mean()))
print('GaussianNB mean cross_val_score: ' + str(score_gnb_dig.mean()))
In [10]:
print('Breast cancer dataset')
print('BernoulliNB mean cross_val_score: ' + str(score_bnb_br_can.mean()))
print('MultinomialNB mean cross_val_score: ' + str(score_mnb_br_can.mean()))
print('GaussianNB mean cross_val_score: ' + str(score_gnb_br_can.mean()))
In [15]:
with open('answer1.txt', 'w') as fout:
fout.write(str(np.max([score_bnb_br_can.mean(), score_mnb_br_can.mean(), score_gnb_br_can.mean()])))
In [16]:
with open('answer2.txt', 'w') as fout:
fout.write(str(np.max([score_bnb_dig.mean(), score_mnb_dig.mean(), score_gnb_dig.mean()])))
In [13]:
answer = '3' + ' ' + '4'
with open('answer3.txt', 'w') as fout:
fout.write(answer)